Calibración y Selección de Modelos en Paralelo

Calibrando el método “Máquinas Vectoriales de Soporte” para los datos de Scoring de Crédito

Versión NO Paralela

Para esto usaremos archivo “MuestraCredito5000V2.csv”"

En el caso del Scoring de Crédito lo que más interesa en detectar a los NO pagadores, por esa razón ejecutaremos 5 veces la validación cruzada usando 10 grupos. En cada paso de la valización cruzada vamos sumando los no pagadores detectados, luego para cada ejecución de la valizadación cruzada almacenamos la detección de los no pagadores en una entrada del vector respectivo al método para luego hacer un gráfico comparativo.

Paquete e1071

Se cargan las librerías

numero.filas <- nrow(datos)
cantidad.validacion.cruzada <- 5
cantidad.grupos <- 10

deteccion.no.radial <- c()
deteccion.no.linear <- c()
deteccion.no.polynomial <- c()
deteccion.no.sigmoid <- c()

tiempo.usual <- Sys.time() 

for(i in seq_len(cantidad.validacion.cruzada)){
  grupos  <- createFolds(1:numero.filas, cantidad.grupos)  # Crea los 10 grupos
  no.radial <- 0
  no.linear <- 0
  no.polynomial <- 0
  no.sigmoid <- 0
  
  # Este ciclo es el que hace 'cross-validation' (validación cruzada) con 10
  # grupos (Folds)
  for(k in 1:cantidad.grupos) {
    muestra <- grupos[[k]]  # Por ser una lista requiere de doble paréntesis
    ttesting <- datos[muestra, ]
    taprendizaje <- datos[-muestra, ]
    
    muestra <- grupos[[k]]  # Por ser una lista requiere de doble paréntesis
    ttesting <- datos[muestra, ]
    taprendizaje <- datos[-muestra, ]
    modelo <- svm(BuenPagador ~ ., data = taprendizaje, kernel = "radial")
    prediccion <- predict(modelo, ttesting)
    Actual <- ttesting[, 6]
    MC <- table(Actual, prediccion)
    #Detección de los NO Pagadores
    no.radial <- no.radial + MC["No", "No"]
    
    modelo <- svm(BuenPagador ~ ., data = taprendizaje, kernel = "linear")
    prediccion <- predict(modelo, ttesting)
    Actual <- ttesting[, 6]
    MC <- table(Actual, prediccion)
    #Detección de los NO Pagadores
    no.linear <- no.linear + MC["No", "No"]
    
    modelo <- svm(BuenPagador ~ ., data = taprendizaje, kernel = "polynomial")
    prediccion <- predict(modelo, ttesting)
    Actual <- ttesting[, 6]
    MC <- table(Actual, prediccion)
    #Detección de los NO Pagadores
    no.polynomial <- no.polynomial + MC["No", "No"]
    
    modelo <- svm(BuenPagador ~ ., data = taprendizaje, kernel = "sigmoid")
    prediccion <- predict(modelo, ttesting)
    Actual <- ttesting[, 6]
    MC <- table(Actual, prediccion)
    #Detección de los NO Pagadores
    no.sigmoid <- no.sigmoid + MC["No", "No"]
  }
  
  deteccion.no.radial[i] <- no.radial
  deteccion.no.linear[i] <- no.linear
  deteccion.no.polynomial[i] <- no.polynomial
  deteccion.no.sigmoid[i] <- no.sigmoid
}

tiempo.usual <- Sys.time() -  tiempo.usual
Time difference of 1.577015 mins

Como se puede verificar en el gráfico el mejor resultado se obtiene usando un Kernel linear

Paquete trainR

Se cargan las librerías

numero.filas <- nrow(datos)
cantidad.validacion.cruzada <- 5
cantidad.grupos <- 10

deteccion.no.radial <- c()
deteccion.no.linear <- c()
deteccion.no.polynomial <- c()
deteccion.no.sigmoid <- c()

tiempo.usual <- Sys.time()

for(i in seq_len(cantidad.validacion.cruzada)){
  grupos  <- createFolds(1:numero.filas, cantidad.grupos)  # Crea los 10 grupos
  no.radial <- 0
  no.linear <- 0
  no.polynomial <- 0
  no.sigmoid <- 0
  
  # Este ciclo es el que hace 'cross-validation' (validación cruzada) con 10
  # grupos (Folds)
  for(k in 1:cantidad.grupos) {
    muestra <- grupos[[k]]  # Por ser una lista requiere de doble paréntesis
    ttesting <- datos[muestra, ]
    taprendizaje <- datos[-muestra, ]
    
    muestra <- grupos[[k]]  # Por ser una lista requiere de doble paréntesis
    ttesting <- datos[muestra, ]
    taprendizaje <- datos[-muestra, ]
    modelo <- train.svm(BuenPagador ~ ., data = taprendizaje, kernel = "radial", probability = FALSE)
    prediccion <- predict(modelo, ttesting)
    MC <- confusion.matrix(ttesting, prediccion)
    # Detección de los NO Pagadores
    no.radial <- no.radial + MC["No", "No"]
    
    modelo <- train.svm(BuenPagador ~ ., data = taprendizaje, kernel = "linear", probability = FALSE)
    prediccion <- predict(modelo, ttesting)
    MC <- confusion.matrix(ttesting, prediccion)
    # Detección de los NO Pagadores
    no.linear <- no.linear + MC["No", "No"]
    
    modelo <- train.svm(BuenPagador ~ ., data = taprendizaje, kernel = "polynomial", probability = FALSE)
    prediccion <- predict(modelo, ttesting)
    MC <- confusion.matrix(ttesting, prediccion)
    # Detección de los NO Pagadores
    no.polynomial <- no.polynomial + MC["No", "No"]
    
    modelo <- train.svm(BuenPagador ~ ., data = taprendizaje, kernel = "sigmoid", probability = FALSE)
    prediccion <- predict(modelo, ttesting)
    MC <- confusion.matrix(ttesting, prediccion)
    # Detección de los NO Pagadores
    no.sigmoid <- no.sigmoid + MC["No", "No"]
  }
  
  deteccion.no.radial[i] <- no.radial
  deteccion.no.linear[i] <- no.linear
  deteccion.no.polynomial[i] <- no.polynomial
  deteccion.no.sigmoid[i] <- no.sigmoid
}

tiempo.usual <- Sys.time() - tiempo.usual
Time difference of 1.606095 mins

Como se puede verificar en el gráfico el mejor resultado se obtiene usando un Kernel linear

Otra forma de hacerlo es:

Se cargan las librerías

Time difference of 1.591441 mins

Como se puede verificar en el gráfico el mejor resultado se obtiene usando un Kernel linear

Versión Paralela

Paquete e1071

Se cargan las librerías

Proceso Paralelo

Constructor del cluster

clusterExport(clp, "datos")

cantidad.validacion.cruzada <- 5

tiempo.paralelo <- Sys.time()

resultados <- clusterApply(clp, 1:cantidad.validacion.cruzada, function(indice) {
  library(e1071)
  library(caret)
  numero.filas <- nrow(datos)
  cantidad.grupos <- 10
  
  grupos  <- createFolds(1:numero.filas, cantidad.grupos)  # Crea los 10 grupos
  no.radial <- 0
  no.linear <- 0
  no.polynomial <- 0
  no.sigmoid <- 0
  
  # Este ciclo es el que hace 'cross-validation' (validación cruzada) con 10
  # grupos (Folds)
  for(k in 1:cantidad.grupos) {
    muestra <- grupos[[k]]  # Por ser una lista requiere de doble paréntesis
    ttesting <- datos[muestra, ]
    taprendizaje <- datos[-muestra, ]
    
    muestra <- grupos[[k]]  # Por ser una lista requiere de doble paréntesis
    ttesting <- datos[muestra, ]
    taprendizaje <- datos[-muestra, ]
    modelo <- svm(BuenPagador ~ ., data = taprendizaje, kernel = "radial", probability = FALSE)
    prediccion <- predict(modelo, ttesting)
    Actual <- ttesting[, 6]
    MC <- table(Actual, prediccion)
    # Detección de los NO Pagadores
    no.radial <- no.radial + MC["No", "No"]
    
    modelo <- svm(BuenPagador ~ ., data = taprendizaje, kernel = "linear", probability = FALSE)
    prediccion <- predict(modelo, ttesting)
    Actual <- ttesting[, 6]
    MC <- table(Actual, prediccion)
    # Detección de los NO Pagadores
    no.linear <- no.linear + MC["No", "No"]
    
    modelo <- svm(BuenPagador ~ ., data = taprendizaje, kernel = "polynomial", probability = FALSE)
    prediccion <- predict(modelo, ttesting)
    Actual <- ttesting[, 6]
    MC <- table(Actual, prediccion)
    # Detección de los NO Pagadores
    no.polynomial <- no.polynomial + MC["No", "No"]
    
    modelo <- svm(BuenPagador ~ ., data = taprendizaje, kernel = "sigmoid", probability = FALSE)
    prediccion <- predict(modelo, ttesting)
    Actual <- ttesting[, 6]
    MC <- table(Actual, prediccion)
    # Detección de los NO Pagadores
    no.sigmoid <- no.sigmoid + MC["No", "No"]
  }
  
  return(list("radial"     = no.radial, 
              "linear"     = no.linear, 
              "polynomial" = no.polynomial, 
              "sigmoid"    = no.sigmoid))
})

tiempo.paralelo <- Sys.time() - tiempo.paralelo

stopCluster(clp)
Time difference of 28.33168 secs

El resultado es una lista de listas, debemos de convertirlo para manejarlo mejor

     radial linear polynomial sigmoid
[1,] 395    399    25         306    
[2,] 392    399    28         307    
[3,] 398    399    29         305    
[4,] 399    399    29         305    
[5,] 398    400    26         302    

Como se puede verificar en el gráfico el mejor resultado se obtiene usando un Kernel linear

Paquete trainR

Se cargan las librerías

Proceso Paralelo

Constructor del cluster

clusterExport(clp, "datos")
cantidad.validacion.cruzada <- 5

tiempo.paralelo <- Sys.time()

resultados <- clusterApply(clp, 1:cantidad.validacion.cruzada, function(indice) {
  library(trainR)
  library(caret)
  numero.filas <- nrow(datos)
  cantidad.grupos <- 10
  
  grupos  <- createFolds(1:numero.filas, cantidad.grupos)  # Crea los 10 grupos
  no.radial <- 0
  no.linear <- 0
  no.polynomial <- 0
  no.sigmoid <- 0
  
  # Este ciclo es el que hace 'cross-validation' (validación cruzada) con 10
  # grupos (Folds)
  for(k in 1:cantidad.grupos) {
    muestra <- grupos[[k]]  # Por ser una lista requiere de doble paréntesis
    ttesting <- datos[muestra, ]
    taprendizaje <- datos[-muestra, ]
    
    muestra <- grupos[[k]]  # Por ser una lista requiere de doble paréntesis
    ttesting <- datos[muestra, ]
    taprendizaje <- datos[-muestra, ]
    modelo <- train.svm(BuenPagador ~ ., data = taprendizaje, kernel = "radial", probability = FALSE)
    prediccion <- predict(modelo, ttesting)
    MC <- confusion.matrix(ttesting, prediccion)
    # Detección de los NO Pagadores
    no.radial <- no.radial + MC["No", "No"]
    
    modelo <- train.svm(BuenPagador ~ ., data = taprendizaje, kernel = "linear", probability = FALSE)
    prediccion <- predict(modelo, ttesting)
    MC <- confusion.matrix(ttesting, prediccion)
    # Detección de los NO Pagadores
    no.linear <- no.linear + MC["No", "No"]
    
    modelo <- train.svm(BuenPagador ~ ., data = taprendizaje, kernel = "polynomial", probability = FALSE)
    prediccion <- predict(modelo, ttesting)
    MC <- confusion.matrix(ttesting, prediccion)
    # Detección de los NO Pagadores
    no.polynomial <- no.polynomial + MC["No", "No"]
    
    modelo <- train.svm(BuenPagador ~ ., data = taprendizaje, kernel = "sigmoid", probability = FALSE)
    prediccion <- predict(modelo, ttesting)
    MC <- confusion.matrix(ttesting, prediccion)
    # Detección de los NO Pagadores
    no.sigmoid <- no.sigmoid + MC["No", "No"]
  }
  
  return(list("radial"     = no.radial, 
              "linear"     = no.linear, 
              "polynomial" = no.polynomial, 
              "sigmoid"    = no.sigmoid))
})

tiempo.paralelo <- Sys.time() - tiempo.paralelo

stopCluster(clp)
Time difference of 28.04616 secs

El resultado es una lista de listas, debemos de convertirlo para manejarlo mejor

     radial linear polynomial sigmoid
[1,] 395    399    24         308    
[2,] 397    402    28         306    
[3,] 396    399    25         306    
[4,] 399    400    27         308    
[5,] 395    390    26         304    

Como se puede verificar en el gráfico el mejor resultado se obtiene usando un Kernel linear

Otra forma de hacerlo es:

Proceso Paralelo

Time difference of 28.18422 secs

El resultado es una lista de matrices, debemos de convertirlo para manejarlo mejor

     radial linear polynomial sigmoid
[1,]    393    399         24     304
[2,]    396    399         27     305
[3,]    395    400         24     306
[4,]    398    401         27     307
[5,]    396    399         27     304

Como se puede verificar en el gráfico el mejor resultado se obtiene usando un Kernel linear

Seleccionando el mejor método para los datos de Scoring de Crédito

Versión NO Paralela

Paquetes

Se cargan las librerías

numero.filas <- nrow(datos)
cantidad.validacion.cruzada <- 5
cantidad.grupos <- 10

deteccion.no.svm <- c()
deteccion.no.knn <- c()
deteccion.no.bayes <- c()
deteccion.no.arbol <- c()
deteccion.no.bosque <- c()
deteccion.no.potenciacion <- c()
deteccion.no.red <- c()

# Medimos tiempo de ejecución
tiempo.no.paralelo <- Sys.time()

# Validación cruzada 5 veces
for (i in 1:cantidad.validacion.cruzada) {
  grupos <- createFolds(1:numero.filas, cantidad.grupos) # Crea los 10 grupos
  no.svm <- 0
  no.knn <- 0
  no.bayes <- 0
  no.arbol <- 0
  no.bosque <- 0
  no.potenciacion <- 0
  no.red <- 0
  
  # Este ciclo es el que hace validación cruzada con 10 grupos
  for (k in 1:cantidad.grupos) {
    muestra <- grupos[[k]] # Por ser una lista requiere de doble paréntesis
    ttesting <- datos[muestra, ]
    ttraining <- datos[-muestra, ]
    
    modelo <- svm(BuenPagador ~ ., data = ttraining, kernel = "linear")
    prediccion <- predict(modelo, ttesting)
    Actual <- ttesting[, 6]
    MC <- table(Actual, prediccion)
    # Detección de los No Pagadores
    no.svm <- no.svm + MC["No", "No"]
    
    modelo <- train.kknn(BuenPagador ~ ., data = ttraining, kmax = 37)
    prediccion <- predict(modelo, ttesting[, -6])
    Actual <- ttesting[, 6]
    MC <- table(Actual, prediccion)
    # Detección de los No Pagadores
    no.knn <- no.knn + MC["No", "No"]
    
    modelo <- naiveBayes(BuenPagador ~ ., data = ttraining)
    prediccion <- predict(modelo, ttesting[, -6])
    Actual <- ttesting[, 6]
    MC <- table(Actual, prediccion)
    # Detección de los No Pagadores
    no.bayes <- no.bayes + MC["No", "No"]
    
    modelo = rpart(BuenPagador ~ ., data = ttraining)
    prediccion <- predict(modelo, ttesting, type = "class")
    Actual <- ttesting[, 6]
    MC <- table(Actual, prediccion)
    # Detección de los No Pagadores
    no.arbol <- no.arbol + MC["No", "No"]
    
    modelo <- randomForest(BuenPagador ~ ., data = ttraining, importance = TRUE)
    prediccion <- predict(modelo, ttesting[, -6])
    Actual <- ttesting[, 6]
    MC <- table(Actual, prediccion)
    # Detección de los No Pagadores
    no.bosque <- no.bosque + MC["No", "No"]
    
    modelo <- ada(BuenPagador ~ ., data = ttraining, iter = 20, nu = 1, type = "discrete")
    prediccion <- predict(modelo, ttesting[, -6])
    Actual <- ttesting[, 6]
    MC <- table(Actual, prediccion)
    # Detección de los No Pagadores
    no.potenciacion <- no.potenciacion + MC["No", "No"]
    
    modelo <- nnet(BuenPagador ~ ., data = ttraining, size = 100, MaxNWts = 5000, rang = 0.01, 
                   decay = 5e-4, maxit = 45, trace = TRUE)
    prediccion <- predict(modelo, ttesting[, -6], type = "class")
    Actual <- ttesting[, 6]
    MC <- table(Actual, factor(prediccion, levels = levels(Actual)), exclude = FALSE)
    # Detección de los No Pagadores
    no.red <- no.red + MC["No", "No"]
  }
  deteccion.no.svm[i] <- no.svm
  deteccion.no.knn[i] <- no.knn
  deteccion.no.bayes[i] <- no.bayes
  deteccion.no.arbol[i] <- no.arbol
  deteccion.no.bosque[i] <- no.bosque
  deteccion.no.potenciacion[i] <- no.potenciacion
  deteccion.no.red[i] <- no.red
}
# weights:  1901
initial  value 3020.277405 
final  value 1845.781240 
converged
# weights:  1901
initial  value 3003.706914 
iter  10 value 1842.193469
iter  20 value 1752.240599
iter  30 value 1417.255478
iter  40 value 1116.694492
final  value 1082.819465 
stopped after 45 iterations
# weights:  1901
initial  value 3120.584716 
iter  10 value 1820.367939
iter  20 value 1593.933733
iter  30 value 1392.387815
iter  40 value 1040.669627
final  value 1036.342667 
stopped after 45 iterations
# weights:  1901
initial  value 3106.219773 
final  value 1813.250010 
converged
# weights:  1901
initial  value 3173.972889 
final  value 1827.776628 
converged
# weights:  1901
initial  value 3105.589827 
final  value 1825.964347 
converged
# weights:  1901
initial  value 3124.400970 
final  value 1815.061913 
converged
# weights:  1901
initial  value 3333.485926 
iter  10 value 1840.406664
iter  20 value 1840.169356
iter  30 value 1642.703475
iter  40 value 1412.207776
final  value 1400.035380 
stopped after 45 iterations
# weights:  1901
initial  value 3110.079355 
final  value 1840.397692 
converged
# weights:  1901
initial  value 3136.483621 
final  value 1833.194645 
converged
# weights:  1901
initial  value 3263.961852 
iter  10 value 1824.001161
iter  20 value 1634.391557
iter  30 value 1410.378600
iter  40 value 1371.308418
final  value 1367.482427 
stopped after 45 iterations
# weights:  1901
initial  value 3067.354770 
final  value 1833.195139 
converged
# weights:  1901
initial  value 3096.451510 
iter  10 value 1843.768687
iter  20 value 1645.717362
iter  30 value 1393.155493
iter  40 value 1207.541368
final  value 1090.492226 
stopped after 45 iterations
# weights:  1901
initial  value 3044.483957 
iter  10 value 1831.917723
iter  20 value 1413.445288
iter  30 value 1100.934568
iter  40 value 1087.352989
final  value 1072.633947 
stopped after 45 iterations
# weights:  1901
initial  value 3143.919351 
final  value 1820.523135 
converged
# weights:  1901
initial  value 3048.424715 
iter  10 value 1816.868064
iter  20 value 1815.956718
iter  30 value 1339.785928
iter  40 value 1119.750695
final  value 1073.043586 
stopped after 45 iterations
# weights:  1901
initial  value 3125.940508 
iter  10 value 1831.405591
iter  20 value 1830.753867
iter  30 value 1535.739119
iter  40 value 1411.756695
final  value 1317.821758 
stopped after 45 iterations
# weights:  1901
initial  value 3075.696871 
iter  10 value 1831.430985
iter  20 value 1829.058822
iter  30 value 1577.511363
iter  40 value 1134.718283
final  value 1082.438398 
stopped after 45 iterations
# weights:  1901
initial  value 3177.982337 
final  value 1829.582561 
converged
# weights:  1901
initial  value 3184.850709 
iter  10 value 1829.464509
iter  20 value 1786.397740
iter  30 value 1216.832813
iter  40 value 1106.321998
final  value 1041.365086 
stopped after 45 iterations
# weights:  1901
initial  value 3158.287169 
iter  10 value 1825.963125
iter  10 value 1825.963107
iter  10 value 1825.963107
final  value 1825.963107 
converged
# weights:  1901
initial  value 3093.312781 
iter  10 value 1836.800612
iter  10 value 1836.800612
iter  10 value 1836.800612
final  value 1836.800612 
converged
# weights:  1901
initial  value 3021.261127 
final  value 1824.151937 
converged
# weights:  1901
initial  value 3103.915963 
iter  10 value 1827.362231
iter  20 value 1695.043590
iter  30 value 1422.039244
iter  40 value 1203.135290
final  value 1038.898564 
stopped after 45 iterations
# weights:  1901
initial  value 3064.679301 
final  value 1838.600038 
converged
# weights:  1901
initial  value 3174.940997 
iter  10 value 1835.017474
final  value 1835.004627 
converged
# weights:  1901
initial  value 3148.073575 
iter  10 value 1833.194400
iter  10 value 1833.194399
iter  10 value 1833.194399
final  value 1833.194399 
converged
# weights:  1901
initial  value 3135.122053 
iter  10 value 1842.020450
iter  20 value 1734.179013
iter  30 value 1514.515517
iter  40 value 1230.359919
final  value 1172.454452 
stopped after 45 iterations
# weights:  1901
initial  value 3102.717405 
final  value 1827.775249 
converged
# weights:  1901
initial  value 3150.888392 
iter  10 value 1813.233305
iter  20 value 1797.583187
iter  30 value 1428.495055
iter  40 value 1393.238769
final  value 1391.757474 
stopped after 45 iterations
# weights:  1901
initial  value 3082.259386 
iter  10 value 1821.458071
iter  20 value 1593.305963
iter  30 value 1233.001262
iter  40 value 1188.046083
final  value 1174.997359 
stopped after 45 iterations
# weights:  1901
initial  value 3102.796660 
iter  10 value 1829.608844
iter  20 value 1829.073314
iter  30 value 1589.995321
iter  40 value 1307.205076
final  value 1167.087942 
stopped after 45 iterations
# weights:  1901
initial  value 3061.253572 
iter  10 value 1827.803429
iter  20 value 1827.695247
iter  30 value 1796.108444
iter  40 value 1285.538775
final  value 1192.584986 
stopped after 45 iterations
# weights:  1901
initial  value 3258.625724 
iter  10 value 1802.270713
iter  20 value 1801.865417
iter  30 value 1534.509310
iter  40 value 1208.490603
final  value 1152.772055 
stopped after 45 iterations
# weights:  1901
initial  value 3172.539907 
iter  10 value 1819.037274
iter  20 value 1368.226738
iter  30 value 1034.573967
iter  40 value 1022.003084
final  value 1021.468336 
stopped after 45 iterations
# weights:  1901
initial  value 3311.143715 
final  value 1825.964269 
converged
# weights:  1901
initial  value 3049.909020 
final  value 1824.156212 
converged
# weights:  1901
initial  value 3088.166026 
final  value 1833.260620 
converged
# weights:  1901
initial  value 3034.130841 
final  value 1849.379528 
converged
# weights:  1901
initial  value 3028.780316 
iter  10 value 1852.951007
iter  20 value 1851.090195
iter  30 value 1438.487630
iter  40 value 1070.974552
final  value 1054.899336 
stopped after 45 iterations
# weights:  1901
initial  value 3163.099089 
iter  10 value 1840.969270
iter  20 value 1693.248698
iter  30 value 1510.711223
iter  40 value 1204.954465
final  value 1113.818700 
stopped after 45 iterations
# weights:  1901
initial  value 3111.730276 
final  value 1829.584193 
converged
# weights:  1901
initial  value 3169.882964 
final  value 1824.160701 
converged
# weights:  1901
initial  value 3083.903725 
final  value 1827.778604 
converged
# weights:  1901
initial  value 3043.905549 
iter  10 value 1822.312719
iter  20 value 1618.436171
iter  30 value 1127.426086
iter  40 value 1045.885130
final  value 1042.357861 
stopped after 45 iterations
# weights:  1901
initial  value 3143.902850 
iter  10 value 1841.928121
iter  20 value 1265.397321
iter  30 value 1172.214780
iter  40 value 1170.063762
final  value 1169.567422 
stopped after 45 iterations
# weights:  1901
initial  value 3059.800442 
iter  10 value 1842.195280
iter  10 value 1842.195275
iter  10 value 1842.195275
final  value 1842.195275 
converged
# weights:  1901
initial  value 3182.683884 
iter  10 value 1813.207178
iter  20 value 1563.116703
iter  30 value 1543.599097
iter  40 value 1527.193922
final  value 1516.032529 
stopped after 45 iterations
# weights:  1901
initial  value 3016.000734 
final  value 1824.153091 
converged
# weights:  1901
initial  value 3249.107480 
iter  10 value 1836.916607
iter  20 value 1836.855474
iter  30 value 1834.692543
iter  40 value 1820.122464
final  value 1625.082429 
stopped after 45 iterations

Graficamos los resultados

Tiempo de ejecución

Time difference of 6.678352 mins

Paquete trainR

La manipulación de los datos se puede hacer muy pesada cuando tratamos con xgboost y neuralnet, pero con trainR resulta más fácil.

Se cargan las librerías

# weights:  1901
initial  value 3076.088096 
iter  10 value 1835.020682
iter  20 value 1835.012939
iter  30 value 1834.622540
iter  40 value 1599.264900
final  value 1463.533835 
stopped after 45 iterations
[1] train-error:0.050222 
[11]    train-error:0.045111 
[21]    train-error:0.039778 
[31]    train-error:0.038222 
[41]    train-error:0.036000 
[51]    train-error:0.032000 
[61]    train-error:0.030667 
[71]    train-error:0.027778 
[79]    train-error:0.026444 
# weights:  1901
initial  value 3162.693012 
iter  10 value 1852.696027
iter  20 value 1589.821904
iter  30 value 1141.641796
final  value 1067.906609 
converged
[1] train-error:0.051111 
[11]    train-error:0.045333 
[21]    train-error:0.042222 
[31]    train-error:0.036000 
[41]    train-error:0.035111 
[51]    train-error:0.033778 
[61]    train-error:0.032889 
[71]    train-error:0.032222 
[79]    train-error:0.031333 
# weights:  1901
initial  value 3107.992599 
final  value 1840.396844 
converged
[1] train-error:0.053556 
[11]    train-error:0.045778 
[21]    train-error:0.041778 
[31]    train-error:0.037556 
[41]    train-error:0.036222 
[51]    train-error:0.034222 
[61]    train-error:0.032667 
[71]    train-error:0.030222 
[79]    train-error:0.029333 
# weights:  1901
initial  value 3101.406156 
final  value 1805.924215 
converged
[1] train-error:0.049111 
[11]    train-error:0.044667 
[21]    train-error:0.041333 
[31]    train-error:0.039111 
[41]    train-error:0.037556 
[51]    train-error:0.034667 
[61]    train-error:0.031556 
[71]    train-error:0.030889 
[79]    train-error:0.030000 
# weights:  1901
initial  value 3036.594334 
iter  10 value 1854.748043
iter  20 value 1854.719841
iter  30 value 1854.416318
iter  40 value 1817.502686
final  value 1698.110585 
stopped after 45 iterations
[1] train-error:0.051778 
[11]    train-error:0.046444 
[21]    train-error:0.040000 
[31]    train-error:0.037778 
[41]    train-error:0.034889 
[51]    train-error:0.032667 
[61]    train-error:0.031778 
[71]    train-error:0.029778 
[79]    train-error:0.029778 
# weights:  1901
initial  value 3095.351764 
final  value 1827.774537 
converged
[1] train-error:0.047778 
[11]    train-error:0.044889 
[21]    train-error:0.040222 
[31]    train-error:0.037778 
[41]    train-error:0.035556 
[51]    train-error:0.033778 
[61]    train-error:0.032444 
[71]    train-error:0.030444 
[79]    train-error:0.029556 
# weights:  1901
initial  value 3154.302596 
final  value 1800.418802 
converged
[1] train-error:0.049778 
[11]    train-error:0.044667 
[21]    train-error:0.040000 
[31]    train-error:0.036889 
[41]    train-error:0.035111 
[51]    train-error:0.034222 
[61]    train-error:0.032222 
[71]    train-error:0.030889 
[79]    train-error:0.029111 
# weights:  1901
initial  value 3118.765116 
iter  10 value 1824.209871
iter  20 value 1631.710053
iter  30 value 1164.042729
iter  40 value 1107.641284
final  value 1056.151836 
stopped after 45 iterations
[1] train-error:0.057556 
[11]    train-error:0.046444 
[21]    train-error:0.040889 
[31]    train-error:0.038889 
[41]    train-error:0.035556 
[51]    train-error:0.033333 
[61]    train-error:0.031556 
[71]    train-error:0.030222 
[79]    train-error:0.027556 
# weights:  1901
initial  value 3117.891292 
iter  10 value 1811.354011
iter  20 value 1799.000540
iter  30 value 1458.531180
iter  40 value 1170.070617
final  value 1054.418319 
stopped after 45 iterations
[1] train-error:0.048222 
[11]    train-error:0.042889 
[21]    train-error:0.038222 
[31]    train-error:0.036444 
[41]    train-error:0.034000 
[51]    train-error:0.031556 
[61]    train-error:0.031111 
[71]    train-error:0.030889 
[79]    train-error:0.028889 
# weights:  1901
initial  value 3035.718705 
final  value 1849.359520 
converged
[1] train-error:0.050667 
[11]    train-error:0.044222 
[21]    train-error:0.040222 
[31]    train-error:0.038000 
[41]    train-error:0.036000 
[51]    train-error:0.034889 
[61]    train-error:0.032444 
[71]    train-error:0.030444 
[79]    train-error:0.029556 
# weights:  1901
initial  value 3154.273292 
iter  10 value 1836.789403
iter  20 value 1810.409912
iter  30 value 1511.086996
iter  40 value 1265.016043
final  value 1114.714119 
stopped after 45 iterations
[1] train-error:0.052889 
[11]    train-error:0.046667 
[21]    train-error:0.041778 
[31]    train-error:0.039333 
[41]    train-error:0.037556 
[51]    train-error:0.036000 
[61]    train-error:0.035333 
[71]    train-error:0.034222 
[79]    train-error:0.033333 
# weights:  1901
initial  value 3134.411375 
final  value 1838.604753 
converged
[1] train-error:0.050222 
[11]    train-error:0.045556 
[21]    train-error:0.042222 
[31]    train-error:0.038222 
[41]    train-error:0.037333 
[51]    train-error:0.035111 
[61]    train-error:0.034222 
[71]    train-error:0.033111 
[79]    train-error:0.031111 
# weights:  1901
initial  value 3210.394228 
iter  10 value 1765.408467
iter  20 value 1361.139961
iter  30 value 1151.455900
iter  40 value 1135.927711
final  value 1135.235221 
stopped after 45 iterations
[1] train-error:0.048444 
[11]    train-error:0.042667 
[21]    train-error:0.042444 
[31]    train-error:0.037778 
[41]    train-error:0.035556 
[51]    train-error:0.034667 
[61]    train-error:0.032000 
[71]    train-error:0.029556 
[79]    train-error:0.028222 
# weights:  1901
initial  value 3139.420506 
final  value 1831.389854 
converged
[1] train-error:0.050000 
[11]    train-error:0.042889 
[21]    train-error:0.038222 
[31]    train-error:0.036222 
[41]    train-error:0.034000 
[51]    train-error:0.032444 
[61]    train-error:0.030444 
[71]    train-error:0.030222 
[79]    train-error:0.029111 
# weights:  1901
initial  value 3023.793717 
final  value 1843.991150 
converged
[1] train-error:0.051778 
[11]    train-error:0.046889 
[21]    train-error:0.042000 
[31]    train-error:0.037111 
[41]    train-error:0.035778 
[51]    train-error:0.032889 
[61]    train-error:0.030889 
[71]    train-error:0.030444 
[79]    train-error:0.028222 
# weights:  1901
initial  value 3041.677910 
iter  10 value 1833.208728
iter  20 value 1833.168464
iter  30 value 1831.912924
iter  40 value 1822.623622
final  value 1817.620483 
stopped after 45 iterations
[1] train-error:0.050667 
[11]    train-error:0.043778 
[21]    train-error:0.038000 
[31]    train-error:0.035778 
[41]    train-error:0.032889 
[51]    train-error:0.031111 
[61]    train-error:0.029333 
[71]    train-error:0.027778 
[79]    train-error:0.026889 
# weights:  1901
initial  value 3217.457242 
iter  10 value 1820.221295
iter  20 value 1684.472010
iter  30 value 1151.853767
iter  40 value 1014.578548
final  value 1013.604655 
stopped after 45 iterations
[1] train-error:0.050889 
[11]    train-error:0.046444 
[21]    train-error:0.040444 
[31]    train-error:0.037778 
[41]    train-error:0.036444 
[51]    train-error:0.033333 
[61]    train-error:0.030889 
[71]    train-error:0.028889 
[79]    train-error:0.027778 
# weights:  1901
initial  value 3126.615705 
iter  10 value 1843.671620
iter  20 value 1684.263628
iter  30 value 1326.992800
iter  40 value 1184.850965
final  value 1177.957471 
stopped after 45 iterations
[1] train-error:0.050444 
[11]    train-error:0.043778 
[21]    train-error:0.040889 
[31]    train-error:0.038000 
[41]    train-error:0.036222 
[51]    train-error:0.032889 
[61]    train-error:0.032222 
[71]    train-error:0.030000 
[79]    train-error:0.029333 
# weights:  1901
initial  value 3110.415956 
final  value 1829.582575 
converged
[1] train-error:0.051556 
[11]    train-error:0.045111 
[21]    train-error:0.041333 
[31]    train-error:0.039333 
[41]    train-error:0.034889 
[51]    train-error:0.033778 
[61]    train-error:0.031111 
[71]    train-error:0.031333 
[79]    train-error:0.031111 
# weights:  1901
initial  value 3104.581665 
iter  10 value 1822.079621
iter  20 value 1600.200537
iter  30 value 1470.347491
iter  40 value 1418.970381
final  value 1228.439176 
stopped after 45 iterations
[1] train-error:0.056444 
[11]    train-error:0.042444 
[21]    train-error:0.040222 
[31]    train-error:0.038000 
[41]    train-error:0.035333 
[51]    train-error:0.034667 
[61]    train-error:0.033778 
[71]    train-error:0.031556 
[79]    train-error:0.030000 
# weights:  1901
initial  value 3100.447784 
iter  10 value 1835.023241
iter  20 value 1800.101294
iter  30 value 1647.747500
iter  40 value 1633.807346
final  value 1630.931751 
stopped after 45 iterations
[1] train-error:0.048667 
[11]    train-error:0.045778 
[21]    train-error:0.040667 
[31]    train-error:0.036444 
[41]    train-error:0.034889 
[51]    train-error:0.032444 
[61]    train-error:0.031333 
[71]    train-error:0.028889 
[79]    train-error:0.027778 
# weights:  1901
initial  value 3059.078037 
iter  10 value 1809.373591
iter  20 value 1540.843259
iter  30 value 1279.951559
iter  40 value 1249.486679
final  value 1241.846832 
stopped after 45 iterations
[1] train-error:0.049111 
[11]    train-error:0.042889 
[21]    train-error:0.040000 
[31]    train-error:0.036444 
[41]    train-error:0.034000 
[51]    train-error:0.030667 
[61]    train-error:0.030222 
[71]    train-error:0.029333 
[79]    train-error:0.027778 
# weights:  1901
initial  value 3074.550497 
iter  10 value 1842.195406
iter  10 value 1842.195406
iter  10 value 1842.195406
final  value 1842.195406 
converged
[1] train-error:0.050222 
[11]    train-error:0.046222 
[21]    train-error:0.043111 
[31]    train-error:0.038000 
[41]    train-error:0.036667 
[51]    train-error:0.034667 
[61]    train-error:0.031111 
[71]    train-error:0.028889 
[79]    train-error:0.028889 
# weights:  1901
initial  value 3115.129671 
iter  10 value 1849.367971
iter  20 value 1811.214148
iter  30 value 1228.269822
iter  40 value 1145.113723
final  value 1142.081014 
stopped after 45 iterations
[1] train-error:0.051111 
[11]    train-error:0.047778 
[21]    train-error:0.040889 
[31]    train-error:0.037556 
[41]    train-error:0.036667 
[51]    train-error:0.034667 
[61]    train-error:0.033556 
[71]    train-error:0.032444 
[79]    train-error:0.030889 
# weights:  1901
initial  value 3225.371411 
iter  10 value 1843.966978
iter  20 value 1835.168841
iter  30 value 1813.319657
iter  40 value 1806.635442
final  value 1802.127517 
stopped after 45 iterations
[1] train-error:0.059556 
[11]    train-error:0.047333 
[21]    train-error:0.041111 
[31]    train-error:0.038222 
[41]    train-error:0.037333 
[51]    train-error:0.035333 
[61]    train-error:0.033333 
[71]    train-error:0.033333 
[79]    train-error:0.032222 
# weights:  1901
initial  value 3133.322343 
iter  10 value 1827.566280
iter  20 value 1776.632003
iter  30 value 1522.672268
iter  40 value 1267.670738
final  value 1093.291090 
stopped after 45 iterations
[1] train-error:0.049778 
[11]    train-error:0.044889 
[21]    train-error:0.041556 
[31]    train-error:0.038222 
[41]    train-error:0.035333 
[51]    train-error:0.033556 
[61]    train-error:0.032444 
[71]    train-error:0.031111 
[79]    train-error:0.030444 
# weights:  1901
initial  value 3229.744133 
iter  10 value 1831.388919
iter  20 value 1799.960239
iter  30 value 1600.972094
iter  40 value 1400.900649
final  value 1389.106361 
stopped after 45 iterations
[1] train-error:0.052889 
[11]    train-error:0.045333 
[21]    train-error:0.041778 
[31]    train-error:0.038444 
[41]    train-error:0.037111 
[51]    train-error:0.034889 
[61]    train-error:0.032444 
[71]    train-error:0.029778 
[79]    train-error:0.028889 
# weights:  1901
initial  value 3140.988052 
iter  10 value 1820.532634
iter  20 value 1820.459039
iter  30 value 1749.091616
iter  40 value 1635.110210
final  value 1480.448803 
stopped after 45 iterations
[1] train-error:0.057111 
[11]    train-error:0.047333 
[21]    train-error:0.042667 
[31]    train-error:0.040000 
[41]    train-error:0.034667 
[51]    train-error:0.034444 
[61]    train-error:0.030889 
[71]    train-error:0.029333 
[79]    train-error:0.028000 
# weights:  1901
initial  value 3088.474052 
final  value 1815.059784 
converged
[1] train-error:0.052000 
[11]    train-error:0.045333 
[21]    train-error:0.040222 
[31]    train-error:0.039111 
[41]    train-error:0.035111 
[51]    train-error:0.033111 
[61]    train-error:0.031556 
[71]    train-error:0.030222 
[79]    train-error:0.028000 
# weights:  1901
initial  value 3179.070658 
iter  10 value 1831.439979
iter  20 value 1829.840994
iter  30 value 1728.856879
iter  40 value 1428.713389
final  value 1319.808004 
stopped after 45 iterations
[1] train-error:0.049556 
[11]    train-error:0.045333 
[21]    train-error:0.040889 
[31]    train-error:0.036667 
[41]    train-error:0.035778 
[51]    train-error:0.032889 
[61]    train-error:0.031778 
[71]    train-error:0.031333 
[79]    train-error:0.030444 
# weights:  1901
initial  value 3111.869753 
iter  10 value 1798.482424
iter  20 value 1634.262759
iter  30 value 1407.430783
iter  40 value 1262.020721
final  value 1261.602522 
stopped after 45 iterations
[1] train-error:0.048444 
[11]    train-error:0.043778 
[21]    train-error:0.041111 
[31]    train-error:0.038222 
[41]    train-error:0.035556 
[51]    train-error:0.032889 
[61]    train-error:0.032667 
[71]    train-error:0.031111 
[79]    train-error:0.029333 
# weights:  1901
initial  value 3190.418320 
iter  10 value 1823.900818
iter  20 value 1670.987854
iter  30 value 1368.686305
iter  40 value 1360.163741
final  value 1357.155873 
stopped after 45 iterations
[1] train-error:0.050222 
[11]    train-error:0.044889 
[21]    train-error:0.041333 
[31]    train-error:0.036889 
[41]    train-error:0.034444 
[51]    train-error:0.032889 
[61]    train-error:0.032667 
[71]    train-error:0.029556 
[79]    train-error:0.028667 
# weights:  1901
initial  value 3064.705146 
iter  10 value 1838.529818
iter  20 value 1816.003190
iter  30 value 1492.034378
iter  40 value 1256.460708
final  value 1132.594022 
stopped after 45 iterations
[1] train-error:0.052667 
[11]    train-error:0.045111 
[21]    train-error:0.039778 
[31]    train-error:0.035333 
[41]    train-error:0.033778 
[51]    train-error:0.032000 
[61]    train-error:0.031111 
[71]    train-error:0.030000 
[79]    train-error:0.029333 
# weights:  1901
initial  value 3148.904334 
final  value 1843.991820 
converged
[1] train-error:0.051556 
[11]    train-error:0.046444 
[21]    train-error:0.042667 
[31]    train-error:0.039333 
[41]    train-error:0.035111 
[51]    train-error:0.033556 
[61]    train-error:0.032222 
[71]    train-error:0.030667 
[79]    train-error:0.029333 
# weights:  1901
initial  value 3064.982169 
final  value 1833.195576 
converged
[1] train-error:0.056444 
[11]    train-error:0.044889 
[21]    train-error:0.041333 
[31]    train-error:0.036889 
[41]    train-error:0.034889 
[51]    train-error:0.031556 
[61]    train-error:0.031111 
[71]    train-error:0.029778 
[79]    train-error:0.030000 
# weights:  1901
initial  value 3153.525690 
iter  10 value 1822.290081
iter  20 value 1769.438798
iter  30 value 1503.262713
iter  40 value 1101.680445
final  value 1074.484593 
stopped after 45 iterations
[1] train-error:0.050000 
[11]    train-error:0.046667 
[21]    train-error:0.040889 
[31]    train-error:0.035778 
[41]    train-error:0.034222 
[51]    train-error:0.032889 
[61]    train-error:0.029778 
[71]    train-error:0.028889 
[79]    train-error:0.027333 
# weights:  1901
initial  value 3114.213602 
final  value 1845.779598 
converged
[1] train-error:0.052444 
[11]    train-error:0.047556 
[21]    train-error:0.040889 
[31]    train-error:0.039778 
[41]    train-error:0.038667 
[51]    train-error:0.034222 
[61]    train-error:0.032000 
[71]    train-error:0.031556 
[79]    train-error:0.030222 
# weights:  1901
initial  value 3208.984377 
iter  10 value 1829.585874
final  value 1829.582665 
converged
[1] train-error:0.048444 
[11]    train-error:0.044667 
[21]    train-error:0.041111 
[31]    train-error:0.038000 
[41]    train-error:0.035778 
[51]    train-error:0.033111 
[61]    train-error:0.031556 
[71]    train-error:0.030444 
[79]    train-error:0.027778 
# weights:  1901
initial  value 3280.817103 
iter  10 value 1806.237526
iter  20 value 1368.384462
iter  30 value 1078.085505
iter  40 value 1072.407260
final  value 1069.573117 
stopped after 45 iterations
[1] train-error:0.049778 
[11]    train-error:0.045556 
[21]    train-error:0.040889 
[31]    train-error:0.038222 
[41]    train-error:0.036000 
[51]    train-error:0.035111 
[61]    train-error:0.034222 
[71]    train-error:0.032667 
[79]    train-error:0.032222 
# weights:  1901
initial  value 3092.852716 
iter  10 value 1822.235561
iter  20 value 1797.391231
iter  30 value 1632.278895
iter  40 value 1621.629173
final  value 1577.489159 
stopped after 45 iterations
[1] train-error:0.049556 
[11]    train-error:0.044889 
[21]    train-error:0.042000 
[31]    train-error:0.038667 
[41]    train-error:0.034222 
[51]    train-error:0.031111 
[61]    train-error:0.030889 
[71]    train-error:0.028889 
[79]    train-error:0.026889 
# weights:  1901
initial  value 3063.946078 
iter  10 value 1819.295279
iter  20 value 1803.444927
iter  30 value 1364.477555
iter  40 value 1057.047987
final  value 1046.094658 
stopped after 45 iterations
[1] train-error:0.048889 
[11]    train-error:0.046000 
[21]    train-error:0.040222 
[31]    train-error:0.036667 
[41]    train-error:0.036000 
[51]    train-error:0.036222 
[61]    train-error:0.034222 
[71]    train-error:0.030444 
[79]    train-error:0.028222 
# weights:  1901
initial  value 3180.552883 
final  value 1851.149454 
converged
[1] train-error:0.058667 
[11]    train-error:0.046000 
[21]    train-error:0.042889 
[31]    train-error:0.039111 
[41]    train-error:0.037111 
[51]    train-error:0.035111 
[61]    train-error:0.034444 
[71]    train-error:0.031556 
[79]    train-error:0.029778 
# weights:  1901
initial  value 3188.825731 
iter  10 value 1843.963318
iter  20 value 1722.213799
iter  30 value 1447.073116
iter  40 value 1094.429537
final  value 1078.473233 
stopped after 45 iterations
[1] train-error:0.053778 
[11]    train-error:0.049111 
[21]    train-error:0.044889 
[31]    train-error:0.039111 
[41]    train-error:0.037333 
[51]    train-error:0.033778 
[61]    train-error:0.032444 
[71]    train-error:0.030222 
[79]    train-error:0.029333 
# weights:  1901
initial  value 3107.260324 
final  value 1822.347934 
converged
[1] train-error:0.049778 
[11]    train-error:0.044889 
[21]    train-error:0.041333 
[31]    train-error:0.037111 
[41]    train-error:0.034222 
[51]    train-error:0.034889 
[61]    train-error:0.032444 
[71]    train-error:0.030667 
[79]    train-error:0.029333 
# weights:  1901
initial  value 3139.263295 
iter  10 value 1824.147487
iter  20 value 1777.940533
iter  30 value 1105.850376
iter  40 value 1033.424197
final  value 1032.212510 
stopped after 45 iterations
[1] train-error:0.051111 
[11]    train-error:0.047556 
[21]    train-error:0.042444 
[31]    train-error:0.040889 
[41]    train-error:0.039556 
[51]    train-error:0.037556 
[61]    train-error:0.036222 
[71]    train-error:0.035333 
[79]    train-error:0.035111 
# weights:  1901
initial  value 3084.727687 
iter  10 value 1835.864363
iter  20 value 1659.344148
iter  30 value 1471.723468
iter  40 value 1406.067405
final  value 1225.055745 
stopped after 45 iterations
[1] train-error:0.051111 
[11]    train-error:0.043556 
[21]    train-error:0.040000 
[31]    train-error:0.036667 
[41]    train-error:0.034000 
[51]    train-error:0.033333 
[61]    train-error:0.031333 
[71]    train-error:0.030000 
[79]    train-error:0.029556 
# weights:  1901
initial  value 3032.365676 
final  value 1822.337914 
converged
[1] train-error:0.049778 
[11]    train-error:0.046444 
[21]    train-error:0.042000 
[31]    train-error:0.038444 
[41]    train-error:0.035333 
[51]    train-error:0.032889 
[61]    train-error:0.031778 
[71]    train-error:0.029111 
[79]    train-error:0.028667 
# weights:  1901
initial  value 3143.875613 
final  value 1807.758050 
converged
[1] train-error:0.046889 
[11]    train-error:0.042222 
[21]    train-error:0.036444 
[31]    train-error:0.033333 
[41]    train-error:0.031778 
[51]    train-error:0.030889 
[61]    train-error:0.030222 
[71]    train-error:0.028444 
[79]    train-error:0.027333 
# weights:  1901
initial  value 3124.084951 
final  value 1833.201254 
converged
[1] train-error:0.050667 
[11]    train-error:0.045111 
[21]    train-error:0.040444 
[31]    train-error:0.037778 
[41]    train-error:0.034889 
[51]    train-error:0.032444 
[61]    train-error:0.031333 
[71]    train-error:0.028667 
[79]    train-error:0.028000 
# weights:  1901
initial  value 3224.947735 
final  value 1843.988378 
converged
[1] train-error:0.049333 
[11]    train-error:0.043556 
[21]    train-error:0.038889 
[31]    train-error:0.037111 
[41]    train-error:0.034000 
[51]    train-error:0.030667 
[61]    train-error:0.028889 
[71]    train-error:0.027111 
[79]    train-error:0.026222 

Graficamos los resultados

Tiempo de ejecución

Time difference of 10.08091 mins

Otra manera de hacerlo:

# weights:  1901
initial  value 3076.722632 
iter  10 value 1831.389076
iter  20 value 1826.024729
iter  30 value 1537.808027
iter  40 value 1527.749390
final  value 1455.281455 
stopped after 45 iterations
[1] train-error:0.049333 
[11]    train-error:0.045333 
[21]    train-error:0.039333 
[31]    train-error:0.038222 
[41]    train-error:0.037111 
[51]    train-error:0.033778 
[61]    train-error:0.032444 
[71]    train-error:0.031778 
[79]    train-error:0.030222 
# weights:  1901
initial  value 3005.546246 
iter  10 value 1848.328958
iter  20 value 1746.831733
iter  30 value 1536.456219
iter  40 value 1408.852275
final  value 1406.695280 
stopped after 45 iterations
[1] train-error:0.052222 
[11]    train-error:0.048222 
[21]    train-error:0.044000 
[31]    train-error:0.040000 
[41]    train-error:0.038222 
[51]    train-error:0.034667 
[61]    train-error:0.032444 
[71]    train-error:0.030222 
[79]    train-error:0.030000 
# weights:  1901
initial  value 3191.563771 
final  value 1854.715116 
converged
[1] train-error:0.051333 
[11]    train-error:0.046889 
[21]    train-error:0.041778 
[31]    train-error:0.039778 
[41]    train-error:0.036222 
[51]    train-error:0.033556 
[61]    train-error:0.031333 
[71]    train-error:0.029333 
[79]    train-error:0.028444 
# weights:  1901
initial  value 3186.904269 
iter  10 value 1820.520396
iter  20 value 1756.496215
iter  30 value 1310.069908
iter  40 value 1083.963747
final  value 1044.752472 
stopped after 45 iterations
[1] train-error:0.051333 
[11]    train-error:0.045333 
[21]    train-error:0.040889 
[31]    train-error:0.034889 
[41]    train-error:0.033778 
[51]    train-error:0.032000 
[61]    train-error:0.031778 
[71]    train-error:0.030667 
[79]    train-error:0.029556 
# weights:  1901
initial  value 3047.426613 
iter  10 value 1829.550220
iter  20 value 1614.479731
iter  30 value 1388.615085
iter  40 value 1381.385633
final  value 1380.711425 
stopped after 45 iterations
[1] train-error:0.051111 
[11]    train-error:0.046667 
[21]    train-error:0.041111 
[31]    train-error:0.036889 
[41]    train-error:0.034889 
[51]    train-error:0.032222 
[61]    train-error:0.030000 
[71]    train-error:0.028444 
[79]    train-error:0.028000 
# weights:  1901
initial  value 3126.278412 
final  value 1815.059870 
converged
[1] train-error:0.050000 
[11]    train-error:0.045333 
[21]    train-error:0.040889 
[31]    train-error:0.039111 
[41]    train-error:0.035111 
[51]    train-error:0.032444 
[61]    train-error:0.032000 
[71]    train-error:0.031111 
[79]    train-error:0.030889 
# weights:  1901
initial  value 3156.848906 
iter  10 value 1798.560892
iter  20 value 1669.501881
iter  30 value 1353.350771
iter  40 value 1345.976640
final  value 1343.951901 
stopped after 45 iterations
[1] train-error:0.048444 
[11]    train-error:0.042444 
[21]    train-error:0.036667 
[31]    train-error:0.034667 
[41]    train-error:0.033556 
[51]    train-error:0.030889 
[61]    train-error:0.030222 
[71]    train-error:0.029556 
[79]    train-error:0.029111 
# weights:  1901
initial  value 3056.955086 
iter  10 value 1843.663628
iter  20 value 1692.098818
iter  30 value 1276.904989
iter  40 value 1070.054820
final  value 1052.590803 
stopped after 45 iterations
[1] train-error:0.058667 
[11]    train-error:0.046889 
[21]    train-error:0.043111 
[31]    train-error:0.039111 
[41]    train-error:0.035556 
[51]    train-error:0.035111 
[61]    train-error:0.034000 
[71]    train-error:0.033111 
[79]    train-error:0.032889 
# weights:  1901
initial  value 3063.459191 
iter  10 value 1833.177803
iter  20 value 1802.597691
iter  30 value 1474.026516
iter  40 value 1363.813914
final  value 1356.092300 
stopped after 45 iterations
[1] train-error:0.051111 
[11]    train-error:0.046000 
[21]    train-error:0.038667 
[31]    train-error:0.035778 
[41]    train-error:0.034000 
[51]    train-error:0.032222 
[61]    train-error:0.030222 
[71]    train-error:0.029556 
[79]    train-error:0.028667 
# weights:  1901
initial  value 3052.888660 
iter  10 value 1825.197178
iter  20 value 1539.573884
iter  30 value 1380.402770
iter  40 value 1155.059073
final  value 1136.965839 
stopped after 45 iterations
[1] train-error:0.053111 
[11]    train-error:0.044222 
[21]    train-error:0.039556 
[31]    train-error:0.036444 
[41]    train-error:0.033778 
[51]    train-error:0.032222 
[61]    train-error:0.030667 
[71]    train-error:0.029778 
[79]    train-error:0.029556 
# weights:  1901
initial  value 3137.735617 
iter  10 value 1847.560150
iter  20 value 1845.554808
iter  30 value 1402.959115
iter  40 value 1386.604484
final  value 1385.323194 
stopped after 45 iterations
[1] train-error:0.053556 
[11]    train-error:0.044889 
[21]    train-error:0.040000 
[31]    train-error:0.037556 
[41]    train-error:0.036000 
[51]    train-error:0.035333 
[61]    train-error:0.032889 
[71]    train-error:0.031778 
[79]    train-error:0.029556 
# weights:  1901
initial  value 3143.431212 
iter  10 value 1832.117172
final  value 1831.390557 
converged
[1] train-error:0.050667 
[11]    train-error:0.044889 
[21]    train-error:0.040667 
[31]    train-error:0.037333 
[41]    train-error:0.035333 
[51]    train-error:0.034889 
[61]    train-error:0.032667 
[71]    train-error:0.031111 
[79]    train-error:0.031333 
# weights:  1901
initial  value 3054.092383 
final  value 1827.774519 
converged
[1] train-error:0.050222 
[11]    train-error:0.043333 
[21]    train-error:0.040000 
[31]    train-error:0.038889 
[41]    train-error:0.038000 
[51]    train-error:0.035778 
[61]    train-error:0.033111 
[71]    train-error:0.032444 
[79]    train-error:0.030444 
# weights:  1901
initial  value 3290.685151 
iter  10 value 1832.829666
final  value 1827.774880 
converged
[1] train-error:0.057556 
[11]    train-error:0.047778 
[21]    train-error:0.043333 
[31]    train-error:0.041111 
[41]    train-error:0.038000 
[51]    train-error:0.035778 
[61]    train-error:0.033333 
[71]    train-error:0.032000 
[79]    train-error:0.031778 
# weights:  1901
initial  value 3125.894526 
iter  10 value 1845.783115
iter  20 value 1717.248265
iter  30 value 1130.272271
iter  40 value 1072.969837
final  value 1069.842988 
stopped after 45 iterations
[1] train-error:0.052000 
[11]    train-error:0.046444 
[21]    train-error:0.040000 
[31]    train-error:0.038000 
[41]    train-error:0.034889 
[51]    train-error:0.033333 
[61]    train-error:0.031778 
[71]    train-error:0.030222 
[79]    train-error:0.027333 
# weights:  1901
initial  value 3110.300187 
final  value 1820.521567 
converged
[1] train-error:0.049778 
[11]    train-error:0.043111 
[21]    train-error:0.040000 
[31]    train-error:0.036667 
[41]    train-error:0.034444 
[51]    train-error:0.033111 
[61]    train-error:0.030889 
[71]    train-error:0.028889 
[79]    train-error:0.028000 
# weights:  1901
initial  value 3054.797559 
final  value 1827.786482 
converged
[1] train-error:0.049778 
[11]    train-error:0.044222 
[21]    train-error:0.039111 
[31]    train-error:0.037333 
[41]    train-error:0.034222 
[51]    train-error:0.032444 
[61]    train-error:0.030889 
[71]    train-error:0.028667 
[79]    train-error:0.027556 
# weights:  1901
initial  value 3099.875373 
iter  10 value 1813.178824
iter  20 value 1617.134195
iter  30 value 1477.764822
iter  40 value 1429.632727
final  value 1405.054187 
stopped after 45 iterations
[1] train-error:0.048889 
[11]    train-error:0.043333 
[21]    train-error:0.040000 
[31]    train-error:0.036667 
[41]    train-error:0.033556 
[51]    train-error:0.032444 
[61]    train-error:0.030889 
[71]    train-error:0.028889 
[79]    train-error:0.027778 
# weights:  1901
initial  value 3100.198027 
final  value 1838.599936 
converged
[1] train-error:0.051333 
[11]    train-error:0.044889 
[21]    train-error:0.040667 
[31]    train-error:0.036667 
[41]    train-error:0.036222 
[51]    train-error:0.034444 
[61]    train-error:0.031333 
[71]    train-error:0.030667 
[79]    train-error:0.029111 
# weights:  1901
initial  value 3174.318508 
iter  10 value 1824.023367
iter  20 value 1483.168265
iter  30 value 1185.096534
iter  40 value 1047.315197
final  value 1044.307795 
stopped after 45 iterations
[1] train-error:0.049556 
[11]    train-error:0.044000 
[21]    train-error:0.040000 
[31]    train-error:0.037111 
[41]    train-error:0.036000 
[51]    train-error:0.034222 
[61]    train-error:0.031111 
[71]    train-error:0.028889 
[79]    train-error:0.028667 
# weights:  1901
initial  value 3170.411684 
iter  10 value 1847.560930
iter  20 value 1531.768983
iter  30 value 1223.786218
iter  40 value 1129.855849
final  value 1112.054935 
stopped after 45 iterations
[1] train-error:0.057111 
[11]    train-error:0.046889 
[21]    train-error:0.043111 
[31]    train-error:0.039556 
[41]    train-error:0.036667 
[51]    train-error:0.035111 
[61]    train-error:0.033778 
[71]    train-error:0.032000 
[79]    train-error:0.030889 
# weights:  1901
initial  value 3086.747530 
iter  10 value 1818.701689
iter  10 value 1818.701689
iter  10 value 1818.701689
final  value 1818.701689 
converged
[1] train-error:0.050667 
[11]    train-error:0.044667 
[21]    train-error:0.041333 
[31]    train-error:0.038889 
[41]    train-error:0.036889 
[51]    train-error:0.034444 
[61]    train-error:0.032444 
[71]    train-error:0.031778 
[79]    train-error:0.030444 
# weights:  1901
initial  value 3172.044081 
final  value 1849.360648 
converged
[1] train-error:0.052444 
[11]    train-error:0.048444 
[21]    train-error:0.043333 
[31]    train-error:0.039556 
[41]    train-error:0.036222 
[51]    train-error:0.033778 
[61]    train-error:0.032667 
[71]    train-error:0.029111 
[79]    train-error:0.027556 
# weights:  1901
initial  value 3100.067719 
iter  10 value 1836.792061
iter  20 value 1835.916803
iter  30 value 1544.536826
iter  40 value 1080.072734
final  value 1071.472628 
stopped after 45 iterations
[1] train-error:0.050222 
[11]    train-error:0.042889 
[21]    train-error:0.040000 
[31]    train-error:0.035778 
[41]    train-error:0.033111 
[51]    train-error:0.031778 
[61]    train-error:0.031111 
[71]    train-error:0.029111 
[79]    train-error:0.027111 
# weights:  1901
initial  value 3053.943013 
final  value 1815.061391 
converged
[1] train-error:0.050000 
[11]    train-error:0.044222 
[21]    train-error:0.040889 
[31]    train-error:0.036667 
[41]    train-error:0.034222 
[51]    train-error:0.032889 
[61]    train-error:0.031333 
[71]    train-error:0.030000 
[79]    train-error:0.028222 
# weights:  1901
initial  value 3159.393930 
iter  10 value 1829.583186
final  value 1829.556175 
converged
[1] train-error:0.051556 
[11]    train-error:0.044444 
[21]    train-error:0.040667 
[31]    train-error:0.038444 
[41]    train-error:0.035111 
[51]    train-error:0.033556 
[61]    train-error:0.030667 
[71]    train-error:0.029333 
[79]    train-error:0.028889 
# weights:  1901
initial  value 3118.968084 
final  value 1843.987301 
converged
[1] train-error:0.051333 
[11]    train-error:0.046000 
[21]    train-error:0.040889 
[31]    train-error:0.038889 
[41]    train-error:0.035556 
[51]    train-error:0.034444 
[61]    train-error:0.032222 
[71]    train-error:0.029556 
[79]    train-error:0.029111 
# weights:  1901
initial  value 3075.248528 
iter  10 value 1822.358558
iter  20 value 1822.255959
iter  30 value 1586.340000
iter  40 value 1220.461498
final  value 1151.192629 
stopped after 45 iterations
[1] train-error:0.049778 
[11]    train-error:0.046000 
[21]    train-error:0.039556 
[31]    train-error:0.035556 
[41]    train-error:0.033333 
[51]    train-error:0.031111 
[61]    train-error:0.031111 
[71]    train-error:0.029778 
[79]    train-error:0.029111 
# weights:  1901
initial  value 3138.301024 
iter  10 value 1819.955625
iter  20 value 1587.318952
iter  30 value 1121.262952
iter  40 value 1050.378468
final  value 1043.084654 
stopped after 45 iterations
[1] train-error:0.051333 
[11]    train-error:0.046000 
[21]    train-error:0.040667 
[31]    train-error:0.038000 
[41]    train-error:0.034667 
[51]    train-error:0.032222 
[61]    train-error:0.031333 
[71]    train-error:0.030889 
[79]    train-error:0.030000 
# weights:  1901
initial  value 3095.150003 
iter  10 value 1820.427664
iter  20 value 1590.642018
iter  30 value 1418.557702
iter  40 value 1409.389810
final  value 1406.585138 
stopped after 45 iterations
[1] train-error:0.049778 
[11]    train-error:0.046000 
[21]    train-error:0.040667 
[31]    train-error:0.038667 
[41]    train-error:0.036444 
[51]    train-error:0.033556 
[61]    train-error:0.032667 
[71]    train-error:0.030889 
[79]    train-error:0.030444 
# weights:  1901
initial  value 3152.902972 
iter  10 value 1798.707063
iter  20 value 1763.878679
iter  30 value 1458.190670
iter  40 value 1061.689737
final  value 1048.386426 
stopped after 45 iterations
[1] train-error:0.048000 
[11]    train-error:0.043778 
[21]    train-error:0.041111 
[31]    train-error:0.038000 
[41]    train-error:0.034667 
[51]    train-error:0.032667 
[61]    train-error:0.030667 
[71]    train-error:0.028889 
[79]    train-error:0.028444 
# weights:  1901
initial  value 3137.134475 
final  value 1851.146463 
converged
[1] train-error:0.052444 
[11]    train-error:0.047333 
[21]    train-error:0.042667 
[31]    train-error:0.039111 
[41]    train-error:0.035778 
[51]    train-error:0.034889 
[61]    train-error:0.031778 
[71]    train-error:0.030444 
[79]    train-error:0.029111 
# weights:  1901
initial  value 3057.256334 
iter  10 value 1851.147520
final  value 1851.147186 
converged
[1] train-error:0.051333 
[11]    train-error:0.048444 
[21]    train-error:0.044000 
[31]    train-error:0.039111 
[41]    train-error:0.037556 
[51]    train-error:0.034444 
[61]    train-error:0.031556 
[71]    train-error:0.031333 
[79]    train-error:0.029778 
# weights:  1901
initial  value 3160.896625 
iter  10 value 1845.779618
iter  10 value 1845.779607
iter  10 value 1845.779607
final  value 1845.779607 
converged
[1] train-error:0.050222 
[11]    train-error:0.043778 
[21]    train-error:0.040667 
[31]    train-error:0.037556 
[41]    train-error:0.035778 
[51]    train-error:0.034222 
[61]    train-error:0.032000 
[71]    train-error:0.030222 
[79]    train-error:0.028889 
# weights:  1901
initial  value 3315.852361 
iter  10 value 1822.338834
iter  10 value 1822.338832
iter  10 value 1822.338832
final  value 1822.338832 
converged
[1] train-error:0.050889 
[11]    train-error:0.048444 
[21]    train-error:0.042444 
[31]    train-error:0.039778 
[41]    train-error:0.036222 
[51]    train-error:0.033333 
[61]    train-error:0.031556 
[71]    train-error:0.031111 
[79]    train-error:0.030000 
# weights:  1901
initial  value 3110.476518 
final  value 1827.776042 
converged
[1] train-error:0.050000 
[11]    train-error:0.046222 
[21]    train-error:0.040889 
[31]    train-error:0.036222 
[41]    train-error:0.034222 
[51]    train-error:0.031778 
[61]    train-error:0.030000 
[71]    train-error:0.028444 
[79]    train-error:0.027111 
# weights:  1901
initial  value 3022.493787 
iter  10 value 1818.741779
iter  20 value 1818.703973
iter  30 value 1818.569096
iter  40 value 1699.538366
final  value 1533.280642 
stopped after 45 iterations
[1] train-error:0.050222 
[11]    train-error:0.046667 
[21]    train-error:0.041556 
[31]    train-error:0.037778 
[41]    train-error:0.035778 
[51]    train-error:0.034444 
[61]    train-error:0.032000 
[71]    train-error:0.030667 
[79]    train-error:0.029778 
# weights:  1901
initial  value 3182.801901 
iter  10 value 1826.009714
final  value 1825.966407 
converged
[1] train-error:0.049333 
[11]    train-error:0.043333 
[21]    train-error:0.040444 
[31]    train-error:0.038000 
[41]    train-error:0.037111 
[51]    train-error:0.033778 
[61]    train-error:0.032000 
[71]    train-error:0.030889 
[79]    train-error:0.029556 
# weights:  1901
initial  value 3289.782524 
final  value 1838.610104 
converged
[1] train-error:0.050222 
[11]    train-error:0.043333 
[21]    train-error:0.039778 
[31]    train-error:0.035778 
[41]    train-error:0.034000 
[51]    train-error:0.030667 
[61]    train-error:0.029556 
[71]    train-error:0.028889 
[79]    train-error:0.027778 
# weights:  1901
initial  value 3101.824882 
iter  10 value 1824.167867
iter  20 value 1824.115255
iter  30 value 1823.713714
iter  40 value 1688.358832
final  value 1418.648485 
stopped after 45 iterations
[1] train-error:0.056444 
[11]    train-error:0.046000 
[21]    train-error:0.040667 
[31]    train-error:0.036667 
[41]    train-error:0.035556 
[51]    train-error:0.030667 
[61]    train-error:0.030222 
[71]    train-error:0.030444 
[79]    train-error:0.028889 
# weights:  1901
initial  value 3128.894675 
iter  10 value 1849.404857
iter  20 value 1849.182319
iter  30 value 1841.687680
iter  40 value 1819.650125
final  value 1667.790761 
stopped after 45 iterations
[1] train-error:0.057778 
[11]    train-error:0.044667 
[21]    train-error:0.042222 
[31]    train-error:0.037556 
[41]    train-error:0.035111 
[51]    train-error:0.034222 
[61]    train-error:0.032667 
[71]    train-error:0.030667 
[79]    train-error:0.029333 
# weights:  1901
initial  value 3174.199778 
iter  10 value 1822.766754
iter  20 value 1618.779038
iter  30 value 1223.862095
iter  40 value 1215.180183
final  value 1214.847912 
stopped after 45 iterations
[1] train-error:0.049778 
[11]    train-error:0.046667 
[21]    train-error:0.042222 
[31]    train-error:0.038667 
[41]    train-error:0.035778 
[51]    train-error:0.033111 
[61]    train-error:0.032000 
[71]    train-error:0.031111 
[79]    train-error:0.029333 
# weights:  1901
initial  value 3204.646934 
final  value 1818.707025 
converged
[1] train-error:0.050222 
[11]    train-error:0.044444 
[21]    train-error:0.040444 
[31]    train-error:0.038000 
[41]    train-error:0.035111 
[51]    train-error:0.032889 
[61]    train-error:0.030889 
[71]    train-error:0.030222 
[79]    train-error:0.028667 
# weights:  1901
initial  value 3065.384238 
final  value 1833.197577 
converged
[1] train-error:0.050889 
[11]    train-error:0.047111 
[21]    train-error:0.041778 
[31]    train-error:0.038889 
[41]    train-error:0.035333 
[51]    train-error:0.033556 
[61]    train-error:0.033111 
[71]    train-error:0.030889 
[79]    train-error:0.029333 
# weights:  1901
initial  value 3164.108749 
final  value 1804.093519 
converged
[1] train-error:0.046667 
[11]    train-error:0.044444 
[21]    train-error:0.040222 
[31]    train-error:0.036444 
[41]    train-error:0.034222 
[51]    train-error:0.031778 
[61]    train-error:0.030000 
[71]    train-error:0.028667 
[79]    train-error:0.028444 
# weights:  1901
initial  value 3077.067709 
iter  10 value 1833.338926
final  value 1833.194528 
converged
[1] train-error:0.050667 
[11]    train-error:0.046444 
[21]    train-error:0.038889 
[31]    train-error:0.037111 
[41]    train-error:0.034889 
[51]    train-error:0.034000 
[61]    train-error:0.033333 
[71]    train-error:0.031333 
[79]    train-error:0.030000 
# weights:  1901
initial  value 3153.085178 
iter  10 value 1827.571386
iter  20 value 1531.849977
iter  30 value 1373.047949
iter  40 value 1257.315726
final  value 1074.179902 
stopped after 45 iterations
[1] train-error:0.049778 
[11]    train-error:0.044889 
[21]    train-error:0.038889 
[31]    train-error:0.037333 
[41]    train-error:0.034889 
[51]    train-error:0.032222 
[61]    train-error:0.030222 
[71]    train-error:0.029778 
[79]    train-error:0.029333 
# weights:  1901
initial  value 3125.681209 
iter  10 value 1839.918878
final  value 1825.974266 
converged
[1] train-error:0.049778 
[11]    train-error:0.044444 
[21]    train-error:0.039111 
[31]    train-error:0.036444 
[41]    train-error:0.033778 
[51]    train-error:0.030889 
[61]    train-error:0.030667 
[71]    train-error:0.029111 
[79]    train-error:0.028222 
# weights:  1901
initial  value 3070.507126 
iter  10 value 1840.165015
iter  20 value 1510.484369
iter  30 value 1070.959935
iter  40 value 1053.090016
final  value 1051.247461 
stopped after 45 iterations
[1] train-error:0.051556 
[11]    train-error:0.046667 
[21]    train-error:0.042222 
[31]    train-error:0.039333 
[41]    train-error:0.037333 
[51]    train-error:0.032889 
[61]    train-error:0.032667 
[71]    train-error:0.031333 
[79]    train-error:0.030444 
# weights:  1901
initial  value 3002.223524 
final  value 1847.575111 
converged
[1] train-error:0.053778 
[11]    train-error:0.048000 
[21]    train-error:0.042667 
[31]    train-error:0.040444 
[41]    train-error:0.037333 
[51]    train-error:0.035333 
[61]    train-error:0.034889 
[71]    train-error:0.031778 
[79]    train-error:0.030889 

Graficamos los resultados

Tiempo de ejecución

Time difference of 10.48027 mins

Versión Paralela

Paquetes

Se cargan las librerías

Proceso Paralelo

Constructor del cluster

clusterExport(clp, "datos")
cantidad.validacion.cruzada <- 5

tiempo.paralelo <- Sys.time()

resultados <- clusterApply(clp, 1:cantidad.validacion.cruzada, function(indice) {
  library(caret)
  library(e1071)
  library(kknn)
  library(class)
  library(rpart)
  library(randomForest)
  library(ada)
  library(nnet)
  library(dplyr)
  
  numero.filas <- nrow(datos)
  cantidad.grupos <- 10
  
  grupos  <- createFolds(1:numero.filas, cantidad.grupos)  # Crea los 10 grupos
  no.svm <- 0
  no.knn <- 0
  no.bayes <- 0
  no.arbol <- 0
  no.bosque <- 0
  no.potenciacion <- 0
  no.red <- 0
  
  # Este ciclo es el que hace 'cross-validation' (validación cruzada) con 10
  # grupos (Folds)
  for(k in 1:cantidad.grupos) {
    muestra <- grupos[[k]] # Por ser una lista requiere de doble paréntesis
    ttesting <- datos[muestra, ]
    ttraining <- datos[-muestra, ]
    
    modelo <- svm(BuenPagador ~ ., data = ttraining, kernel = "linear")
    prediccion <- predict(modelo, ttesting)
    Actual <- ttesting[, 6]
    MC <- table(Actual, prediccion)
    # Detección de los No Pagadores
    no.svm <- no.svm + MC["No", "No"]
    
    modelo <- train.kknn(BuenPagador ~ ., data = ttraining, kmax = 37)
    prediccion <- predict(modelo, ttesting[, -6])
    Actual <- ttesting[, 6]
    MC <- table(Actual, prediccion)
    # Detección de los No Pagadores
    no.knn <- no.knn + MC["No", "No"]
    
    modelo <- naiveBayes(BuenPagador ~ ., data = ttraining)
    prediccion <- predict(modelo, ttesting[, -6])
    Actual <- ttesting[, 6]
    MC <- table(Actual, prediccion)
    # Detección de los No Pagadores
    no.bayes <- no.bayes + MC["No", "No"]
    
    modelo = rpart(BuenPagador ~ ., data = ttraining)
    prediccion <- predict(modelo, ttesting, type = "class")
    Actual <- ttesting[, 6]
    MC <- table(Actual, prediccion)
    # Detección de los No Pagadores
    no.arbol <- no.arbol + MC["No", "No"]
    
    modelo <- randomForest(BuenPagador ~ ., data = ttraining, importance = TRUE)
    prediccion <- predict(modelo, ttesting[, -6])
    Actual <- ttesting[, 6]
    MC <- table(Actual, prediccion)
    # Detección de los No Pagadores
    no.bosque <- no.bosque + MC["No", "No"]
    
    modelo <- ada(BuenPagador ~ ., data = ttraining, iter = 20, nu = 1, type = "discrete")
    prediccion <- predict(modelo, ttesting[, -6])
    Actual <- ttesting[, 6]
    MC <- table(Actual, prediccion)
    # Detección de los No Pagadores
    no.potenciacion <- no.potenciacion + MC["No", "No"]
    
    modelo <- nnet(BuenPagador ~ ., data = ttraining, size = 100, MaxNWts = 5000, rang = 0.01, 
                   decay = 5e-4, maxit = 45, trace = TRUE)
    prediccion <- predict(modelo, ttesting[, -6], type = "class")
    Actual <- ttesting[, 6]
    MC <- table(Actual, factor(prediccion, levels = levels(Actual)), exclude = FALSE)
    # Detección de los No Pagadores
    no.red <- no.red + MC["No", "No"]
  }
  
  return(list("svm"     = no.svm, 
              "knn"     = no.knn, 
              "bayes"   = no.bayes, 
              "arboles" = no.arbol,
              "bosques" = no.bosque,
              "potenciacion" = no.potenciacion,
              "redes_nnet" = no.red))
})

tiempo.paralelo <- Sys.time() - tiempo.paralelo

stopCluster(clp)
Time difference of 1.848197 mins

El resultado es una lista de listas, debemos de convertirlo para manejarlo mejor

     svm knn bayes arboles bosques potenciacion redes_nnet
[1,] 399 516 135   491     503     488          111       
[2,] 399 511 133   497     505     497          123       
[3,] 399 513 137   493     505     492          162       
[4,] 399 503 137   496     504     483          32        
[5,] 399 502 137   488     500     490          120       

Como se puede verificar en el gráfico el mejor resultado se obtiene usando un Kernel linear

trainR

Se cargan las librerías

Proceso Paralelo

clusterExport(clp, "datos")
cantidad.validacion.cruzada <- 5

tiempo.paralelo <- Sys.time()

resultados <- clusterApply(clp, 1:cantidad.validacion.cruzada, function(indice) {
  library(caret)
  library(trainR)
  
  numero.filas <- nrow(datos)
  cantidad.grupos <- 10
  
  grupos  <- createFolds(1:numero.filas, cantidad.grupos)  # Crea los 10 grupos
  no.svm <- 0
  no.knn <- 0
  no.bayes <- 0
  no.arbol <- 0
  no.bosque <- 0
  no.potenciacion <- 0
  no.red <- 0
  no.xg  <- 0
  no.red.neu <- 0
  no.glm <- 0
  
  # Este ciclo es el que hace 'cross-validation' (validación cruzada) con 10
  # grupos (Folds)
  for(k in 1:cantidad.grupos) {
    muestra <- grupos[[k]] # Por ser una lista requiere de doble paréntesis
    ttesting <- datos[muestra, ]
    ttraining <- datos[-muestra, ]
    
    modelo <- train.svm(BuenPagador ~ ., data = ttraining, kernel = "linear", probability = FALSE)
    prediccion <- predict(modelo, ttesting)
    MC <- confusion.matrix(ttesting, prediccion)
    # Detección de los No Pagadores
    no.svm <- no.svm + MC["No", "No"]
    
    modelo <- train.knn(BuenPagador ~ ., data = ttraining, kmax = 37)
    prediccion <- predict(modelo, ttesting)
    MC <- confusion.matrix(ttesting, prediccion)
    # Detección de los No Pagadores
    no.knn <- no.knn + MC["No", "No"]
    
    modelo <- train.bayes(BuenPagador ~ ., data = ttraining)
    prediccion <- predict(modelo, ttesting)
    MC <- confusion.matrix(ttesting, prediccion)
    # Detección de los No Pagadores
    no.bayes <- no.bayes + MC["No", "No"]
    
    modelo = train.rpart(BuenPagador ~ ., data = ttraining)
    prediccion <- predict(modelo, ttesting)
    MC <- confusion.matrix(ttesting, prediccion)
    # Detección de los No Pagadores
    no.arbol <- no.arbol + MC["No", "No"]
    
    modelo <- train.randomForest(BuenPagador ~ ., data = ttraining)
    prediccion <- predict(modelo, ttesting)
    MC <- confusion.matrix(ttesting, prediccion)
    # Detección de los No Pagadores
    no.bosque <- no.bosque + MC["No", "No"]
    
    modelo <- train.ada(BuenPagador ~ ., data = ttraining, iter = 20, nu = 1, type = "discrete")
    prediccion <- predict(modelo, ttesting)
    MC <- confusion.matrix(ttesting, prediccion)
    # Detección de los No Pagadores
    no.potenciacion <- no.potenciacion + MC["No", "No"]
    
    modelo <- train.nnet(BuenPagador ~ ., data = ttraining, size = 100, MaxNWts = 5000, rang = 0.01, 
               decay = 5e-4, maxit = 45, trace = TRUE)
    prediccion <- predict(modelo, ttesting)
    MC <- confusion.matrix(ttesting, prediccion)
    # Detección de los No Pagadores
    no.red <- no.red + MC["No", "No"]
    
    modelo <- train.xgboost(BuenPagador ~ ., data = ttraining, nrounds = 79,
                        print_every_n = 10, maximize = F , eval_metric = "error")
    prediccion <- predict(modelo, ttesting)
    MC <- confusion.matrix(ttesting, prediccion)
    # Detección de los No Pagadores
    no.xg <- no.xg + MC["No", "No"]
    
    modelo <- train.neuralnet(BuenPagador ~., data = ttraining, hidden = c(3, 2,6), 
                          linear.output = FALSE, threshold = 0.5, stepmax = 1e+06)
    prediccion <- predict(modelo, ttesting)
    MC <- confusion.matrix(ttesting, prediccion)
    # Detección de los No Pagadores
    no.red.neu <- no.red.neu + MC["No", "No"]
    
    modelo <- train.glm(BuenPagador ~ ., data = ttraining)
    prediccion <- predict(modelo, ttesting)
    MC <- confusion.matrix(ttesting, prediccion)
    # Detección de los No Pagadores
    no.glm <- no.glm + MC["No", "No"]
  }
  
  return(list("svm"     = no.svm, 
              "knn"     = no.knn, 
              "bayes"   = no.bayes, 
              "arboles" = no.arbol,
              "bosques" = no.bosque,
              "potenciacion" = no.potenciacion,
              "redes_nnet" = no.red,
              "xgboost" = no.xg,
              "redes_neuralnet" = no.red.neu,
              "regresion_logistica" = no.glm))
})

tiempo.paralelo <- Sys.time() - tiempo.paralelo

stopCluster(clp)
Time difference of 3.998378 mins

El resultado es una lista de listas, debemos de convertirlo para manejarlo mejor

     svm knn bayes arboles bosques potenciacion redes_nnet xgboost
[1,] 399 510 140   494     501     494          57         504    
[2,] 399 509 138   494     503     491          114        502    
[3,] 399 510 139   483     506     495          132        499    
[4,] 402 513 136   483     507     488          112        508    
[5,] 400 510 136   493     508     495          160        505    
     redes_neuralnet regresion_logistica
[1,] 372             381                
[2,] 307             375                
[3,] 243             377                
[4,] 211             379                
[5,] 257             375                

Graficamos los resultados

Como se puede verificar en el gráfico el mejor resultado se obtiene usando un Kernel linear

Veamos el error (Versión Paralela)

Paquetes

Se cargan las librerías

Proceso Paralelo

Constructor del cluster

clusterExport(clp, "datos")
cantidad.validacion.cruzada <- 5

tiempo.paralelo <- Sys.time()

resultados <- clusterApply(clp, 1:cantidad.validacion.cruzada, function(indice) {
  library(caret)
  library(e1071)
  library(kknn)
  library(class)
  library(rpart)
  library(randomForest)
  library(ada)
  library(nnet)
  library(dplyr)
  
  numero.filas <- nrow(datos)
  cantidad.grupos <- 10
  
  grupos  <- createFolds(1:numero.filas, cantidad.grupos)  # Crea los 10 grupos
  error.svm <- 0
  error.knn <- 0
  error.bayes <- 0
  error.arbol <- 0
  error.bosque <- 0
  error.potenciacion <- 0
  error.red <- 0
  
  # Este ciclo es el que hace 'cross-validation' (validación cruzada) con 10
  # grupos (Folds)
  for(k in 1:cantidad.grupos) {
    muestra <- grupos[[k]] # Por ser una lista requiere de doble paréntesis
    ttesting <- datos[muestra, ]
    ttraining <- datos[-muestra, ]
    
    modelo <- svm(BuenPagador ~ ., data = ttraining, kernel = "linear")
    prediccion <- predict(modelo, ttesting)
    Actual <- ttesting[, 6]
    MC <- table(Actual, prediccion)
    # Detección de los No Pagadores
    error.svm <- error.svm + (1 - (sum(diag(MC)) / sum(MC))) * 100
    
    modelo <- train.kknn(BuenPagador ~ ., data = ttraining, kmax = 37)
    prediccion <- predict(modelo, ttesting[, -6])
    Actual <- ttesting[, 6]
    MC <- table(Actual, prediccion)
    # Detección de los No Pagadores
    error.knn <- error.knn + (1 - (sum(diag(MC)) / sum(MC))) * 100
    
    modelo <- naiveBayes(BuenPagador ~ ., data = ttraining)
    prediccion <- predict(modelo, ttesting[, -6])
    Actual <- ttesting[, 6]
    MC <- table(Actual, prediccion)
    # Detección de los No Pagadores
    error.bayes <- error.bayes + (1 - (sum(diag(MC)) / sum(MC))) * 100
    
    modelo = rpart(BuenPagador ~ ., data = ttraining)
    prediccion <- predict(modelo, ttesting, type = "class")
    Actual <- ttesting[, 6]
    MC <- table(Actual, prediccion)
    # Detección de los No Pagadores
    error.arbol <- error.arbol + (1 - (sum(diag(MC)) / sum(MC))) * 100
    
    modelo <- randomForest(BuenPagador ~ ., data = ttraining, importance = TRUE)
    prediccion <- predict(modelo, ttesting[, -6])
    Actual <- ttesting[, 6]
    MC <- table(Actual, prediccion)
    # Detección de los No Pagadores
    error.bosque <- error.bosque + (1 - (sum(diag(MC)) / sum(MC))) * 100
    
    modelo <- ada(BuenPagador ~ ., data = ttraining, iter = 20, nu = 1, type = "discrete")
    prediccion <- predict(modelo, ttesting[, -6])
    Actual <- ttesting[, 6]
    MC <- table(Actual, prediccion)
    # Detección de los No Pagadores
    error.potenciacion <- error.potenciacion + (1 - (sum(diag(MC)) / sum(MC))) * 100
    
    modelo <- nnet(BuenPagador ~ ., data = ttraining, size = 100, MaxNWts = 5000, rang = 0.01, 
                   decay = 5e-4, maxit = 45, trace = TRUE)
    prediccion <- predict(modelo, ttesting[, -6], type = "class")
    Actual <- ttesting[, 6]
    MC <- table(Actual, factor(prediccion, levels = levels(Actual)), exclude = FALSE)
    # Detección de los No Pagadores
    error.red <- error.red + (1 - (sum(diag(MC)) / sum(MC))) * 100
  }
  
  return(list("svm"     = error.svm / cantidad.grupos, 
              "knn"     = error.knn / cantidad.grupos, 
              "bayes"   = error.bayes / cantidad.grupos, 
              "arboles" = error.arbol / cantidad.grupos,
              "bosques" = error.bosque / cantidad.grupos,
              "potenciacion" = error.potenciacion / cantidad.grupos,
              "redes_nnet" = error.red / cantidad.grupos))
})

tiempo.paralelo <- Sys.time() - tiempo.paralelo

stopCluster(clp)
Time difference of 1.883579 mins

El resultado es una lista de listas, debemos de convertirlo para manejarlo mejor

     svm  knn  bayes arboles bosques potenciacion redes_nnet
[1,] 7.26 5.48 15.1  5.48    5.12    5.82         11.84     
[2,] 7.24 5.14 14.84 5.38    4.98    5.82         11.92     
[3,] 7.26 5.42 14.9  5.4     5.1     5.52         11.44     
[4,] 7.26 5.48 14.9  5.42    4.98    6.2          12.2      
[5,] 7.24 5.22 14.88 5.42    4.94    6.1          13.3      

Como se puede verificar en el gráfico el mejor resultado se obtiene usando un Kernel linear

trainR

Se cargan las librerías

Proceso Paralelo

clusterExport(clp, "datos")
cantidad.validacion.cruzada <- 5

tiempo.paralelo <- Sys.time()

resultados <- clusterApply(clp, 1:cantidad.validacion.cruzada, function(indice) {
  library(caret)
  library(trainR)
  
  numero.filas <- nrow(datos)
  cantidad.grupos <- 10
  
  grupos  <- createFolds(1:numero.filas, cantidad.grupos)  # Crea los 10 grupos
  error.svm <- 0
  error.knn <- 0
  error.bayes <- 0
  error.arbol <- 0
  error.bosque <- 0
  error.potenciacion <- 0
  error.red <- 0
  error.xg  <- 0
  error.red.neu <- 0
  error.glm <- 0
  
  # Este ciclo es el que hace 'cross-validation' (validación cruzada) con 10
  # grupos (Folds)
  for(k in 1:cantidad.grupos) {
    muestra <- grupos[[k]] # Por ser una lista requiere de doble paréntesis
    ttesting <- datos[muestra, ]
    ttraining <- datos[-muestra, ]
    
    modelo <- train.svm(BuenPagador ~ ., data = ttraining, kernel = "linear", probability = FALSE)
    prediccion <- predict(modelo, ttesting)
    MC <- confusion.matrix(ttesting, prediccion)
    # Detección de los No Pagadores
    error.svm <- error.svm + (1 - (sum(diag(MC)) / sum(MC))) * 100
    
    modelo <- train.knn(BuenPagador ~ ., data = ttraining, kmax = 37)
    prediccion <- predict(modelo, ttesting)
    MC <- confusion.matrix(ttesting, prediccion)
    # Detección de los No Pagadores
    error.knn <- error.knn + (1 - (sum(diag(MC)) / sum(MC))) * 100
    
    modelo <- train.bayes(BuenPagador ~ ., data = ttraining)
    prediccion <- predict(modelo, ttesting)
    MC <- confusion.matrix(ttesting, prediccion)
    # Detección de los No Pagadores
    error.bayes <- error.bayes + (1 - (sum(diag(MC)) / sum(MC))) * 100
    
    modelo = train.rpart(BuenPagador ~ ., data = ttraining)
    prediccion <- predict(modelo, ttesting)
    MC <- confusion.matrix(ttesting, prediccion)
    # Detección de los No Pagadores
    error.arbol <- error.arbol + (1 - (sum(diag(MC)) / sum(MC))) * 100
    
    modelo <- train.randomForest(BuenPagador ~ ., data = ttraining)
    prediccion <- predict(modelo, ttesting)
    MC <- confusion.matrix(ttesting, prediccion)
    # Detección de los No Pagadores
    error.bosque <- error.bosque + (1 - (sum(diag(MC)) / sum(MC))) * 100
    
    modelo <- train.ada(BuenPagador ~ ., data = ttraining, iter = 20, nu = 1, type = "discrete")
    prediccion <- predict(modelo, ttesting)
    MC <- confusion.matrix(ttesting, prediccion)
    # Detección de los No Pagadores
    error.potenciacion <- error.potenciacion + (1 - (sum(diag(MC)) / sum(MC))) * 100
    
    modelo <- train.nnet(BuenPagador ~ ., data = ttraining, size = 100, MaxNWts = 5000, rang = 0.01, 
               decay = 5e-4, maxit = 45, trace = TRUE)
    prediccion <- predict(modelo, ttesting)
    MC <- confusion.matrix(ttesting, prediccion)
    # Detección de los No Pagadores
    error.red <- error.red + (1 - (sum(diag(MC)) / sum(MC))) * 100
    
    modelo <- train.xgboost(BuenPagador ~ ., data = ttraining, nrounds = 79,
                        print_every_n = 10, maximize = F , eval_metric = "error")
    prediccion <- predict(modelo, ttesting)
    MC <- confusion.matrix(ttesting, prediccion)
    # Detección de los No Pagadores
    error.xg <- error.xg + (1 - (sum(diag(MC)) / sum(MC))) * 100
    
    modelo <- train.neuralnet(BuenPagador ~., data = ttraining, hidden = c(3, 2,6), 
                          linear.output = FALSE, threshold = 0.5, stepmax = 1e+06)
    prediccion <- predict(modelo, ttesting)
    MC <- confusion.matrix(ttesting, prediccion)
    # Detección de los No Pagadores
    error.red.neu <- error.red.neu + (1 - (sum(diag(MC)) / sum(MC))) * 100
    
    modelo <- train.glm(BuenPagador ~ ., data = ttraining)
    prediccion <- predict(modelo, ttesting)
    MC <- confusion.matrix(ttesting, prediccion)
    # Detección de los No Pagadores
    error.glm <- error.glm + (1 - (sum(diag(MC)) / sum(MC))) * 100
  }
  
  return(list("svm"     = error.svm, 
              "knn"     = error.knn, 
              "bayes"   = error.bayes, 
              "arboles" = error.arbol,
              "bosques" = error.bosque,
              "potenciacion" = error.potenciacion,
              "redes_nnet" = error.red,
              "xgboost" = error.xg,
              "redes_neuralnet" = error.red.neu,
              "regresion_logistica" = error.glm))
})

tiempo.paralelo <- Sys.time() - tiempo.paralelo

stopCluster(clp)
Time difference of 3.808758 mins

El resultado es una lista de listas, debemos de convertirlo para manejarlo mejor

     svm  knn  bayes arboles bosques potenciacion redes_nnet xgboost
[1,] 72.4 52.8 149.2 54.2    50.8    57.4         113        55.6   
[2,] 72.6 52.4 149.4 54      50.6    55.6         125        55     
[3,] 72.4 53.8 150.6 54.2    49      59           135        52.8   
[4,] 72.6 52.2 149.8 55.6    49.8    56.4         129.6      52.8   
[5,] 72.2 52.8 149.8 54.2    50      57.2         134        54.8   
     redes_neuralnet regresion_logistica
[1,] NaN             73.4               
[2,] NaN             72.6               
[3,] NaN             73.4               
[4,] NaN             73.4               
[5,] NaN             73.2               

Graficamos los resultados